📘 NuttX 错误排查
与日志分析实战
🧩 30 章 · 从入门到专家
⚡ 完整目录
v2.0
01
NuttX 错误排查概述
断言失败、内存溢出、任务挂起、驱动错误 · 排查思路与基本原则
02
日志系统基础
syslog 架构 · 日志级别 emerg~debug · 输出目标:串口、文件、内存缓冲区
03
动态日志控制
CONFIG_SYSLOG · syslog_set_priority · 模块化日志 syslog_enable/disable
04
断言与 panic
assert 宏实现 · panic 处理流程 · 寄存器 dump、堆栈回溯定位
05
堆栈回溯(Backtrace)
backtrace() / backtrace_symbols() · addr2line · 自定义 backtrace
06
内存调试
mm_heap 调试 · 内存泄漏 CONFIG_DEBUG_MM · redzone/poison 越界检测
07
任务与调度调试
ps 命令 · 栈使用 CONFIG_STACK_COLORATION · 调度器锁检测
08
中断与异常调试
中断向量表 · 异常捕获 · 嵌套与优先级 · irqinfo 命令
09
驱动调试框架
inode 注册 · open/close/ioctl · syslog/debug 宏 · i2c/spi 工具
10
文件系统调试
挂载/卸载日志 · 块设备 I/O 错误 · VFS 层 CONFIG_FS_DEBUG
11
网络协议栈调试
uIP 调试选项 · tcpdump 模拟 · socket 错误码 · 性能排查
12
USB 协议栈调试
设备/主机调试 · 描述符解析 · STALL/NAK 传输错误排查
13
电源管理调试
PM 框架调试 · 休眠唤醒问题 · 电源状态转换日志
14
时间与定时器调试
系统 tick · 定时器精度 · alarm / watchdog 超时排查
15
多核(SMP)调试
SMP 架构 · CPU 同步 · 原子操作与锁 · 负载查看
16
信号量与互斥锁调试
死锁 CONFIG_DEBUG_SEMAPHORE · 优先级反转 · 信号量泄漏
17
消息队列与管道调试
队列溢出 · 管道读写阻塞 · mq_send/mq_receive 调试
18
工作队列(Work Queue)调试
任务挂起 · work 延迟执行 · 取消与重入问题
19
NuttShell(NSH)调试命令
ps, free, irqinfo, ls, dd, hexdump · 自定义调试命令
20
GDB 调试 NuttX
OpenOCD+GDB 环境 · 断点单步 · 查看变量内存 · 多任务调试
21
QEMU 模拟调试
QEMU 模拟目标板 · gdbstub 模式 · 复现与调试问题
22
RAM 日志(RAM log)
配置 RAM log 缓冲区 · crash 后读取 · ramlog 命令
23
性能分析(Profiling)
CONFIG_PROFILE · 函数调用计数 · 执行时间测量 cycle counter
24
代码静态分析
sparse / cppcheck · 常见警告解读 · CI 集成静态分析
25
单元测试框架
Kconfig 测试 · apps/testing · 自定义用例 · 覆盖率分析
26
常见错误模式(上)
空指针解引用 · 数组越界 · 未初始化变量 · 整数溢出
27
常见错误模式(下)
栈溢出 · 堆损坏 · 任务优先级不当 · 中断调用阻塞函数
28
日志分析工具
grep/sed/awk 分析 syslog · 时间戳对齐 · 过滤聚合 · log2viz
29
远程调试与日志收集
网络/UART 远程收集 · 日志压缩传输 · 远程 GDB 调试
30
综合实战案例
无人机飞控 / IoT 网关 · 完整排查流程:从日志到修复